home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C++ / Applications / Mic-1 v1.0 / Project and Source / Source / mic_control.h < prev    next >
Text File  |  1996-05-15  |  3KB  |  111 lines

  1. #ifndef _MIC_CONTROL_
  2. #define _MIC_CONTROL_
  3.  
  4. #include "mic_main.h"
  5.  
  6. //extern class Mic_1_Class;
  7. class MMUXClass;
  8. class ControlStoreClass;
  9. class MPCClass;
  10. class IncrementerClass;
  11. class MIRClass;
  12. class MicroSeqClass;
  13.  
  14. // the microprogram multiplexer; determines jump location in the microprogram
  15. class MMUXClass
  16. {
  17.     private:
  18.         short Jump;
  19.         unsigned short Incrementer_word;
  20.         unsigned short Address_word;
  21.     public:
  22.         MMUXClass() {Jump = 0; Incrementer_word = 0; Address_word = 0;}
  23.         void input_MicroSeq(Mic_1_Class& Mic, short newJump) {Jump = newJump; output(Mic);}
  24.         void input_Incrementer(Mic_1_Class& Mic, unsigned short new_Inc_word)
  25.         {
  26.             Incrementer_word = new_Inc_word;
  27.             if (!Jump)
  28.                 output(Mic);
  29.         }
  30.         void input_MIR(Mic_1_Class& Mic, unsigned short new_Addr_word)
  31.         {
  32.             Address_word = new_Addr_word;
  33.             if (Jump)
  34.                 output(Mic);
  35.         }
  36.         void output(Mic_1_Class& Mic);
  37.         friend ostream& operator << (ostream& s, MMUXClass& m);
  38. };
  39.  
  40. // The microprogram counter
  41. class MPCClass
  42. {
  43.     private:
  44.         unsigned short word;
  45.     public:
  46.         MPCClass() {word = 0;}
  47.         void input_MMUX (unsigned short newWord) {word = newWord;}
  48.         void output (Mic_1_Class& Mic);
  49.         friend ostream& operator << (ostream& s, MPCClass& m);
  50. };
  51.  
  52. class IncrementerClass
  53. {
  54.     private:
  55.         unsigned short word;
  56.     public:
  57.         IncrementerClass() {word = 0;}
  58.         void input_MPC (Mic_1_Class& Mic, unsigned short newWord) {word = newWord; output(Mic);}
  59.         void output(Mic_1_Class& Mic);
  60. };
  61.  
  62. class ControlStoreClass
  63. {
  64.     private:
  65.         short Index;
  66.         unsigned long store[256];
  67.     public:
  68.         ControlStoreClass() {Index = 0; for (int i=0; i<256; i++) store[i]=0;}
  69.         unsigned long getNthWord (short n);
  70.         Boolean putNthWord (short n, unsigned long newWord);
  71.         void input_MPC (Mic_1_Class& Mic, short which)
  72.         {
  73.             Index = which;
  74.             output(Mic);
  75.         }
  76.         void output(Mic_1_Class& Mic);
  77.         friend ostream& operator << (ostream& s, ControlStoreClass& c);
  78.         friend istream& operator >> (istream& s, ControlStoreClass& c);
  79. };
  80. short InitMicControl (Mic_1_Class& Mic);
  81.  
  82. class MIRClass
  83. {
  84.     private:
  85.         unsigned long MIR;
  86.     public:
  87.         MIRClass () {MIR = 0;}
  88.         unsigned long getMIR (void) {return MIR;}
  89.         void putMIR (unsigned long newMIR) {MIR = newMIR;}
  90.         void input_ControlStore (unsigned long newMIR) {MIR = newMIR;}
  91.         void output (Mic_1_Class& Mic);
  92.         friend ostream& operator << (ostream& s, MIRClass& m);
  93. };
  94.  
  95. class MicroSeqClass
  96. {
  97.     private:
  98.         short zero;
  99.         short negative;
  100.         short jump_cond;
  101.     public:
  102.         MicroSeqClass() {zero = negative = false; jump_cond = 0;}
  103.         void input_negative(short newNegative) {negative = newNegative;}
  104.         // input_negative must be called before input_zero
  105.         void input_zero (Mic_1_Class& Mic, short newZero) {zero = newZero; output(Mic);}
  106.         void input_MIR (short new_jump_cond) {jump_cond = new_jump_cond;}
  107.         void output(Mic_1_Class& Mic);
  108.         friend ostream& operator << (ostream& s, MicroSeqClass& m);
  109. };
  110.  
  111. #endif